package main

/**************************************
1.golang net/http包+ mysql
2.ftp服务端实现数据实时接收
3.websocket实现长链接，与web建立长链接web端实时获取数据
4.定时删除功能
5.提供web数据接口实现增、删、改、查、下载、播放等功能；
6.提供日志库
**************************************/
import (
	"groudserver/config"
	"groudserver/db"
	"groudserver/file"
	"groudserver/handler"
	"groudserver/log"
	"groudserver/routers"
	"os"
	"os/signal"
	"runtime"
	"sync"
	"syscall"

	"github.com/panjf2000/ants/v2"
	"github.com/sirupsen/logrus"
	"go.uber.org/zap"
)

var v config.Cfg

// 初始化加载日志路径
func init() {
	//加载配置
	JsonParse := config.NewJsonStruct()
	v = JsonParse.LoadCfg() //获取结构体信息
	pfile := v.Dir + "/Log"
	pSource := v.Dir + "/Source"
	if len(v.Dir) > 0 {
		//创建目录
		pfv := file.NewFileStruct()
		pfv.CreteFile(pfile) //创建LOG路径
		pfv.CreteFile(pSource)
	}
	pfile += "/aodsServer.log" //日志保存
	log.ConfigLog(pfile)
	db.InitDB()
}
func main() {
	logrus.Info("Starting run AodsServer")
	runtime.GOMAXPROCS(runtime.NumCPU())
	ch := make(chan os.Signal)
	pServer := hanlder.NewServer()
	pRouter := router.NewRouter()
	logrus.Info("FTP 网关配置 ftpRouter:", v.FtpConf)
	var wg sync.WaitGroup
	pServerJob := func() {
		defer wg.Done()
		pServer.Start()
	}
	pRouterJob := func() {
		defer wg.Done()
		pRouter.CreateFtpRouter(v.FtpConf)
	}
	wg.Add(2)
	ants.Submit(pServerJob)
	ants.Submit(pRouterJob)
	signal.Notify(ch, syscall.SIGTERM, syscall.SIGINT)
	sig := <-ch
	logrus.Info("exiting .....", zap.Any("signal", sig))
	pServer.Stop()
	logrus.Info("Stop Server ....")
}
